package model

import (
	"fmt"
	"ginblog/utils/errmsg"
)

type Category struct {
	ID   uint   `gorm:"primary_key;auto_increment" json:"id"`
	Name string `gorm:"type:varchar(20);not null" json:"name"`
}

// 查询分类是否存在
func CheckCate(name string) int {
	var cate Category
	// 查询这个用户名的id，存放在user对象中
	db.Debug().Model(&cate).Select("id").Where("name = ?", name).First(&cate)
	// 判断如果用的id存在，大于0，则用户存在，返回
	if cate.ID > 0 {
		return errmsg.ERROR_CATENAME_USED // 用户存在的状态吗
	}

	//err := db.Debug().Table("user").Where("username = ?", username).First(&user).Error
	//if err != nil {
	//	return errmsg.ERROR_USERNAME_USED
	//}
	return errmsg.SUCCESS
}

// 添加分类的方法，结构体方法
func CreateCate(data *Category) int {
	// data.Password = ScryptPw(data.Password)
	// data.BeforeSave() //钩子函数调用，名字不一样需要调用
	err := db.Debug().Create(&data).Error
	if err != nil {
		fmt.Println(err)
		return errmsg.ERROR // 500的错误状态码
	}

	return errmsg.SUCCESS
}

// 查询分类列表
func GetCateList(pageSize int, pageNum int) ([]Category, int64) {
	var cateList []Category
	var total int64
	//  分页  一页多少条数据，  偏移量
	// 存放在切片中
	err := db.Debug().Select("id,name").Limit(pageSize).Offset((pageNum - 1) * pageSize).Find(&cateList)

	//err := db.Debug().Select("*").Limit(pageSize).Offset((pageNum - 1) * pageSize).Find(&userList) // err := db.Select("id,username,role,created_at").Limit(pageSize).Offset((pageNum - 1) * pageSize).Find(&users)
	err = db.Debug().Model(&cateList).Count(&total)
	if err.Error != nil {
		fmt.Println("查询异常了！！")
		fmt.Println(err.Error)
		return nil, 0
	}
	return cateList, total

}

// 编辑分类
func EditCate(id int, data *Category) (*Category, int) {
	var cate Category
	var maps = make(map[string]interface{})
	maps["name"] = data.Name

	err := db.Debug().Model(&cate).Where("id = ? ", id).Updates(maps).Error
	if err != nil {
		return nil, errmsg.ERROR
	}
	return &cate, errmsg.SUCCESS
}

// 钩子函数密码加密
func (c *Category) BeforeSave() {

}

// 删除分类
func DeleteCate(id int) int {
	var cate Category
	//err := db.Debug().Model(&cate).Where("id = ? ", id).First(&cate)
	//if err != nil {
	//	return errmsg.ERROR
	//}
	// 有bug 应该先确认数据库中有误这个id的数据，如果没有删毛线
	err := db.Debug().Where("id = ? ", id).Delete(&cate).Error
	if err != nil {
		return errmsg.ERROR
	}
	return errmsg.SUCCESS
}

// 查询分类下的所有文章
// todo
